package it.clariter.dao;

import it.clariter.connection.MyConnection;
import it.clariter.model.Cliente;
import it.clariter.web.action.ActionConstants;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

//Cliente: id, codice, descrizione, ragioneSociale, indirizzo, codiceFiscale, documenti(ArrayList<Documento>)
public class ClienteDAO {

	public int insert(Cliente cliente)
	{
		Connection c=null;
		PreparedStatement ps=null;
		int result=0;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("INSERT INTO "+DaoConstants.NOME_TABELLA_CLIENTE+" SET "+DaoConstants.COLONNA_CODICE_CLIENTE+"=?,"+DaoConstants.COLONNA_DESCRIZIONE_CLIENTE+"=?,"+DaoConstants.COLONNA_RAGIONE_SOCIALE_CLIENTE+"=?,"+DaoConstants.COLONNA_INDIRIZZO_CLIENTE+"=?,"+DaoConstants.COLONNA_CODICE_FISCALE_CLIENTE+"=?,"+DaoConstants.COLONNA_TIPOLOGIA_CLIENTE+"=?");
			ps.setString(1, cliente.getCodice());
			ps.setString(2, cliente.getDescrizione());
			ps.setString(3, cliente.getRagioneSociale());
			ps.setString(4, cliente.getIndirizzo());
			ps.setString(5, cliente.getCodiceFiscale());
			ps.setString(6, cliente.getTipologia());
			result=ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return result;
	}
	public int update(Cliente cliente)
	{
		Connection c=null;
		PreparedStatement ps=null;
		int result=0;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("UPDATE "+DaoConstants.NOME_TABELLA_CLIENTE+" SET "+DaoConstants.COLONNA_CODICE_CLIENTE+"=?,"+DaoConstants.COLONNA_DESCRIZIONE_CLIENTE+"=?,"+DaoConstants.COLONNA_RAGIONE_SOCIALE_CLIENTE+"=?,"+DaoConstants.COLONNA_INDIRIZZO_CLIENTE+"=?,"+DaoConstants.COLONNA_CODICE_FISCALE_CLIENTE+"=?,"+DaoConstants.COLONNA_TIPOLOGIA_CLIENTE+"=? WHERE "+DaoConstants.COLONNA_ID_CLIENTE+"=?");
			ps.setString(1, cliente.getCodice());
			ps.setString(2, cliente.getDescrizione());
			ps.setString(3, cliente.getRagioneSociale());
			ps.setString(4, cliente.getIndirizzo());
			ps.setString(5, cliente.getCodiceFiscale());
			ps.setString(6, cliente.getTipologia());
			ps.setInt(7, cliente.getIdCliente());
			result=ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return result;
	}
	public int delete(int idva)
	{
		Connection c=null;
		PreparedStatement ps=null;
		int result=0;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("DELETE FROM "+DaoConstants.NOME_TABELLA_CLIENTE+" WHERE "+DaoConstants.COLONNA_ID_CLIENTE+"=?");
			ps.setInt(1, idva);
			result=ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return result;
	}
	public List<Cliente>getList()
	{
		Connection c=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		List <Cliente>list=new ArrayList<Cliente>();
		Cliente cliente=null;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("SELECT * FROM "+DaoConstants.NOME_TABELLA_CLIENTE+" WHERE "+DaoConstants.COLONNA_TIPOLOGIA_CLIENTE+"='"+ActionConstants.TIPOLOGIA_CLIENTE+"'");
			rs=ps.executeQuery();
			while(rs.next())
			{
				cliente=new Cliente();
				cliente=makeObject(cliente,rs);
				list.add(cliente);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return list;
	}
	public List<Cliente>getListTotale()
	{
		Connection c=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		List <Cliente>list=new ArrayList<Cliente>();
		Cliente cliente=null;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("SELECT * FROM "+DaoConstants.NOME_TABELLA_CLIENTE);
			rs=ps.executeQuery();
			while(rs.next())
			{
				cliente=new Cliente();
				cliente=makeObject(cliente,rs);
				list.add(cliente);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return list;
	}
	public Cliente get(int idva)
	{
		Connection c=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		Cliente cliente=null;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("SELECT * FROM "+DaoConstants.NOME_TABELLA_CLIENTE+" WHERE "+DaoConstants.COLONNA_ID_CLIENTE+"=? AND "+DaoConstants.COLONNA_TIPOLOGIA_CLIENTE+"='"+ActionConstants.TIPOLOGIA_CLIENTE+"'");
			ps.setInt(1, idva);
			rs=ps.executeQuery();
			if(rs.next())
			{
				cliente=new Cliente();
				cliente=makeObject(cliente,rs);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return cliente;
	}
	public Cliente getFornitore(int idva)
	{
		Connection c=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		Cliente cliente=null;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("SELECT * FROM "+DaoConstants.NOME_TABELLA_CLIENTE+" WHERE "+DaoConstants.COLONNA_ID_CLIENTE+"=? AND "+DaoConstants.COLONNA_TIPOLOGIA_CLIENTE+"='"+ActionConstants.TIPOLOGIA_FORNITORE+"'");
			ps.setInt(1, idva);
			rs=ps.executeQuery();
			if(rs.next())
			{
				cliente=new Cliente();
				cliente=makeObject(cliente,rs);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return cliente;
	}
	public List<Cliente> findByExample(Cliente cliente)
	{
		Connection c=null;
		Statement stm=null;
		ResultSet rs=null;
		Cliente cliente1=null;
		List<Cliente>list=new ArrayList<Cliente>();
		String query="SELECT * FROM "+DaoConstants.NOME_TABELLA_CLIENTE+" WHERE 1=1 ";
		try
		{
			c=MyConnection.getConnection();
			if((cliente.getTipologia()!=null)&&(!(cliente.getTipologia().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_TIPOLOGIA_CLIENTE+" LIKE '"+cliente.getTipologia()+"%' ";
			}
			if((cliente.getCodice()!=null)&&(!(cliente.getCodice().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_CODICE_CLIENTE+" LIKE '"+cliente.getCodice()+"%' ";
			}
			if((cliente.getDescrizione()!=null)&&(!(cliente.getDescrizione().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_DESCRIZIONE_CLIENTE+" LIKE '"+cliente.getDescrizione()+"%' ";
			}
			if((cliente.getRagioneSociale()!=null)&&(!(cliente.getRagioneSociale().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_RAGIONE_SOCIALE_CLIENTE+" LIKE '"+cliente.getRagioneSociale()+"%' ";
			}
			if((cliente.getIndirizzo()!=null)&&(!(cliente.getIndirizzo().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_INDIRIZZO_CLIENTE+" LIKE '"+cliente.getIndirizzo()+"%' ";
			}
			if((cliente.getCodiceFiscale()!=null)&&(!(cliente.getCodiceFiscale().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_CODICE_FISCALE_CLIENTE+" LIKE '"+cliente.getCodiceFiscale()+"%' ";
			}
			stm=c.createStatement();
			rs=stm.executeQuery(query);
			while(rs.next())
			{
				cliente1=new Cliente();
				cliente1=makeObject(cliente1,rs);
				list.add(cliente1);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				stm.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return list;
	}
	{

	}
	public Cliente makeObject(Cliente cliente,ResultSet rs) throws SQLException
	{
		cliente.setIdCliente(rs.getInt(DaoConstants.COLONNA_ID_CLIENTE));
		cliente.setCodice(rs.getString(DaoConstants.COLONNA_CODICE_CLIENTE));
		cliente.setDescrizione(rs.getString(DaoConstants.COLONNA_DESCRIZIONE_CLIENTE));
		cliente.setRagioneSociale(rs.getString(DaoConstants.COLONNA_RAGIONE_SOCIALE_CLIENTE));
		cliente.setIndirizzo(rs.getString(DaoConstants.COLONNA_INDIRIZZO_CLIENTE));
		cliente.setCodiceFiscale(rs.getString(DaoConstants.COLONNA_CODICE_FISCALE_CLIENTE));
		cliente.setTipologia(rs.getString(DaoConstants.COLONNA_TIPOLOGIA_CLIENTE));
		return cliente;
	}
}
